package excel

import org.apache.poi.ss.usermodel.*
import org.apache.poi.xssf.usermodel.XSSFWorkbook
import java.io.FileInputStream

fun main() {
    // 读取的 Excel 文件路径
    val filePath =
        "D:\\ZOEY\\微信文件\\WeChat Files\\majie123_\\FileStorage\\File\\2023-08\\阿巴嘎旗项目在线远程项目测点信息-已梳理完成 0802.xlsx"

    FileInputStream(filePath).use { fileInputStream ->
        val workbook = XSSFWorkbook(fileInputStream)
        val sheet = workbook.getSheetAt(0)

        // 获取公式计算器
        val formulaEvaluator = workbook.creationHelper.createFormulaEvaluator()

        // 定义要读取的行范围
        val startRowNum = 2 // L3 单元格所在行的行号（从 0 开始）
        val endRowNum = 133 // L134 单元格所在行的行号（从 0 开始）

        // 遍历行范围内的单元格并打印内容
        for (i in startRowNum..endRowNum) {
            val row = sheet.getRow(i)
            row?.let {
                val cell = row.getCell(11) // L 列对应的索引是 11
                cell?.let {
                    val cellValue = getCellValue(cell, formulaEvaluator)
                    println(cellValue)
                } ?: run {
                    println("Row ${i + 1}, Cell L${i + 1} is empty.")
                }
            }
        }
    }
}

// 读取单元格内容并转换为字符串
fun getCellValue(cell: Cell, formulaEvaluator: FormulaEvaluator): String {
    return when (cell.cellType) {
        CellType.STRING -> cell.stringCellValue
        CellType.NUMERIC -> cell.numericCellValue.toString()
        CellType.BOOLEAN -> cell.booleanCellValue.toString()
        CellType.FORMULA -> {
            // 计算公式并获取计算结果
            val cellValue = formulaEvaluator.evaluate(cell)
            getCellValue(cellValue)
        }
        else -> ""
    }
}

// 获取公式计算后的单元格值
fun getCellValue(cellValue: CellValue): String {
    return when (cellValue.cellType) {
        CellType.STRING -> cellValue.stringValue
        CellType.NUMERIC -> cellValue.numberValue.toString()
        CellType.BOOLEAN -> cellValue.booleanValue.toString()
        else -> ""
    }
}